當我們在多個不同的畫面之間有傳遞資料的需求時,除了單例 (Singleton) 之外,還有另一種常用的方式:protocol
。與單例不同的是,protocol
是單向的傳遞資料方式,適合在兩個畫面之間進行資料傳遞。本文將說明如何使用 protocol
,讓一個畫面將資料傳遞給另一個畫面。
protocol
我們首先在需要發送資料的畫面(例如 bViewController
)宣告一個 protocol
,並定義要傳遞的資料內容。在這裡,我們傳遞一個 String
值,命名為 SendData
。當然,你也可以傳遞更多的值,甚至使用 struct
來一次傳遞多個值。protocol bViewControllerDelegate: AnyObject { // bViewController 為當前畫面名稱
func SendData(_ lbtext: String) // 定義傳遞的資料
}
delegate
: 接著,我們在 bViewController
中宣告一個 delegate
變數,並將它設置為弱引用 (weak) 以避免循環引用。這個 delegate
會指向接收資料的畫面weak var delegate: bViewControllerDelegate?
delegate
的方法,並傳遞你要傳的值。例如當按下按鈕或其他觸發條件時,將 lbabel.text
傳遞出去: delegate?.SendData(lbabel.text ?? "")
aViewController
)中,我們可以宣告一個變數來接收傳遞過來的值。這一步是選擇性的,依據需求而定。
var blbtext = ""
5.實作 protocol
並設定接收資料的動作 最後,我們在接收端的畫面實作這個 protocol
,並將具體的資料處理邏輯放入 SendData
方法中。這裡可以是更新變數、重新整理畫面或其他操作。
extension aViewController: bViewControllerDelegate { // aViewController 為接收端,bViewController 為發送端
func SendData(_ lbtext: String) { // 方法名稱必須與發送端一致
blbtext = lbtext // 將資料存放到變數中
aViewController.reloaddata() // 或執行其他需要的動作,例如重新整理資料
}
}
透過 protocol
,我們可以實現單向的資料傳遞,適合用在一個畫面將資料傳遞給另一個畫面的情境中。相較於單例 (Singleton),protocol
更加靈活,適合短期、單次的資料傳遞。如果對於資料傳遞有更多的需求,可以考慮將 protocol
與其他設計模式結合使用。